Incompatible overrides (mypy)
It’s unsafe to override a method with a more specific argument type
「より具体的な型の引数でメソッドをオーバーライド」
引数の型を狭める
For return types, it’s unsafe to override a method with a more general return type.
「より一般的な型の返り値でメソッドをオーバーライド」
返り値の型を広げる
Aクラスを継承する例より
def test(self, t: Sequence[int]) -> Sequence[str]:
引数
GeneralizedArgument: OK
シーケンスだけでなくイテラブルを受け取れる
シーケンスを渡すという使い方は変えなくて済む
NarrowerArgument: Error
リストしか受け取れない
事前条件に制限が加わっており、継承する前と同じ使い方ができないので置換原則に違反している
返り値
NarrowerReturn: OK
シーケンスより狭めてリストを返す
シーケンスを扱うという使い方は変えなくて済む
GeneralizedReturn: Error
シーケンスだけでなくイテラブル(例:ファイルオブジェクト)を返せる
事後条件が広がっており、継承する前と同じ使い方ができない
if you decide that type safety is not necessary
# type: ignore[override]